package serializable;

import java.io.*;

/*本类用于测试序列化与反序列化
* 序列化：是指把程序中的java对象永久保存在磁盘中，比如文件
* 相当于是写出的过程，方向是out，用到的流是ObjeckOujjtputStream
* 反序列化：是指把已经序列化在文件中功能保存的数据，读取/回复称java对象的过程
* 相当于是读取的过程，方向是in，用到的流是ObjectInputStream*/
public class TestSerializable {
    public static void main(String[] args) {
        method1();//用于完成序列化的功能
        method2();//用户与完成反序列化的功能
    }

    private static void method1() {
        //1.声明一个在本方法内部都生效的局部变量，手动初始化值为null
        ObjectOutputStream out = null;
        //2.由于IO操作可能会发生异常，所以使用结构：try-catch
        try{
            //3.创建用于序列化的流对象
            out = new ObjectOutputStream(new FileOutputStream("D:\\Workspace\\demo\\1.txt"));
            //4.指定一个要序列化输出的对象
            Student obj = new Student("name",16,"lisuhuxia",'男');
            //5.使用序列化流将对象输出
            out.writeObject(obj);
            System.out.println("成功");

        }catch(Exception e){
            System.out.println("失败");
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void method2() {
        //反序列方法
        //1.声明一个在本方法内都生效的局部变量
        ObjectInputStream in = null ;
        try {
            in = new ObjectInputStream(new FileInputStream("D:\\Workspace\\demo\\1.txt"));
            Object o = in.readObject();
            System.out.println("成功！");
        } catch (Exception e) {
            System.out.println("失败");
            e.printStackTrace();
        }
    }
}//io流8.17   42

